package pe.gob.osce.sirenas.wd.jsf.bean.registro;
/*
* Resumen.
* Objeto 				:	RegistroDatosPersonalesBean.java
* Descripcion 			: 	.
* Fecha de Creacion 	: 	26/02/2015.
* Pry de Creacion 		: 	RNA/RNS.
* Autor 				: 	Julio Cayulla.
* ================================================================================================
* Modificaciones
* Motivo						Fecha		Nombre				Descripcion
* ================================================================================================
*
*/
import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.Serializable;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
import java.util.Random;
import java.util.ResourceBundle;

import javax.ejb.EJB;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.naming.NamingException;

import org.apache.log4j.Logger;
import org.primefaces.context.RequestContext;
import org.primefaces.event.FileUploadEvent;
import org.primefaces.model.DefaultStreamedContent;
import org.primefaces.model.StreamedContent;
import org.primefaces.model.UploadedFile;

import pe.gob.osce.sirenas.model.AuditoriaDTO;
import pe.gob.osce.sirenas.model.ComunicacionesDTO;
import pe.gob.osce.sirenas.model.DistritoDTO;
import pe.gob.osce.sirenas.model.DomicilioDTO;
import pe.gob.osce.sirenas.model.FichaArbitralDTO;
import pe.gob.osce.sirenas.model.HojaVidaDTO;
import pe.gob.osce.sirenas.model.PersonaDTO;
import pe.gob.osce.sirenas.model.ProvinciaDTO;
import pe.gob.osce.sirenas.model.RegionDTO;
import pe.gob.osce.sirenas.svc.ObtenerDatosComunesServiceLocal;
import pe.gob.osce.sirenas.svc.RegistrarDatosPersonalesServiceLocal;
import pe.gob.osce.sirenas.util.ModeloException;
import pe.gob.osce.sirenas.util.NegocioException;
import pe.gob.osce.sirenas.wd.jsf.bean.NavegadorBean;
import pe.gob.osce.sirenas.wd.util.ConstanteWeb;
import pe.gob.osce.sirenas.wd.util.RepositorioDatos;
import pe.gob.osce.sirenas.wd.util.TareaCargaDatos;
import pe.gob.osce.sirenas.wd.util.UBaseManage;

@ManagedBean(name="registroDatosPersonalesBean")
@SessionScoped
public class RegistroDatosPersonalesBean extends UBaseManage implements Serializable{
	/**
	 * 
	 */
	private static final long serialVersionUID = 4214133685499512002L;

	final static Logger log = Logger.getLogger(RegistroSolicitudBean.class);
	
	@EJB
	private	ObtenerDatosComunesServiceLocal	obtenerDatosComunesService;	
	
	ResourceBundle propSirenas = ResourceBundle.getBundle(ConstanteWeb.PROPERTIES);
	@EJB
	private	RegistrarDatosPersonalesServiceLocal	registrarDatosPersonalesService;	
	
	private TareaCargaDatos cargaDatos = new TareaCargaDatos();

	private	PersonaDTO registro;
	private	PersonaDTO personaHistorial;
	private	List<PersonaDTO> listPersonaRectificadas;
	private	ComunicacionesDTO comunicaciones;
	private	ComunicacionesDTO comunicaciones2;
	private	ComunicacionesDTO comunicaciones3;
	private	ComunicacionesDTO comunicaciones4;
	private	List<ComunicacionesDTO> listaComunicacionesHistorial;
	private AuditoriaDTO auditoria;
	private DomicilioDTO domicilioPersona;
	private DomicilioDTO domicilioValidar;
	private List<DomicilioDTO> listDomicilioHistorial;
	private UploadedFile photo;
	private UploadedFile pdfCV;
	private List<RegionDTO> listRegion=null;
	private List<ProvinciaDTO> listProvincia=null;
	private List<DistritoDTO> listDistrito=null;	
	private	HojaVidaDTO hojaVidaActiva;
	private	HojaVidaDTO hojaVidaNueva;
	List<HojaVidaDTO> listaHojaVidaDTO;
	
	private RequestContext context;
	private String codTramite;	
	private RepositorioDatos repositorio;
	private FichaArbitralDTO fichaArbitral;
	private Boolean enabledComunicacion=false;
	private Boolean enabledComunicacion2=false;
	private Boolean enabledComunicacion3=true;
	private Boolean enabledComunicacion4=true;
	private Boolean btnGuardar=false;
	
	private NavegadorBean navegador;
	/**
	 * Resumen.	Metodo que iniciliza la bandeja de evaluacion de quejas
	 * @return cadena mapeada para la navegacion, tipo String.
	 * @throws Exception 
	 */
	public String verRegistroDatosPersonales() throws Exception {
		System.out.println("Iniciacion verRegistroDatosPersonales");
		this.registro=new PersonaDTO();
		this.fichaArbitral= new FichaArbitralDTO();
		this.hojaVidaActiva= new HojaVidaDTO();
		this.hojaVidaNueva= new HojaVidaDTO();
		this.listaHojaVidaDTO=new ArrayList<HojaVidaDTO>();
		
		this.personaHistorial=new PersonaDTO();
		this.listPersonaRectificadas= new ArrayList<PersonaDTO>();
		this.auditoria=new AuditoriaDTO();
		this.domicilioPersona=new DomicilioDTO();	
		this.domicilioValidar=new DomicilioDTO();
		this.comunicaciones=new ComunicacionesDTO();
		this.comunicaciones2=new ComunicacionesDTO();
		this.comunicaciones3=new ComunicacionesDTO();
		this.comunicaciones4=new ComunicacionesDTO();
		this.listRegion = new ArrayList<RegionDTO>();
		try {
			this.listRegion = registrarDatosPersonalesService.listarRegion();
			this.listProvincia= new ArrayList<ProvinciaDTO>();
			this.listProvincia = registrarDatosPersonalesService.listarProvincia();
			this.listDistrito = new ArrayList<DistritoDTO>();
			this.listDistrito = registrarDatosPersonalesService.listarDistrito();

			repositorio=obtenerRepositorioDatos();
			this.fichaArbitral=(FichaArbitralDTO)obtenerObjetoSession(ConstanteWeb.FICHA_REGISTRO);
			this.auditoria=(AuditoriaDTO)obtenerObjetoSession(ConstanteWeb.AUDITORIA);
			
			/**Inicio Carga de la Persona en Sesion*/
			PersonaDTO personaDTO=new PersonaDTO();
			personaDTO.setIdPersona(this.fichaArbitral.getIdPersona());
			
			DomicilioDTO domicilioDTO=new DomicilioDTO();
			domicilioDTO.setIdPersona(this.fichaArbitral.getIdPersona());
		
	
			/**Realizamos la carga de los Datos de la Persona*/
			this.registro=registrarDatosPersonalesService.obtenerPersona(personaDTO);
			/**Seteamos los valores de los Indicadores de la Persona*/
			this.registro.setTipoDocumento(repositorio.getLabelParametro(this.registro.getIndTipoDocumento().longValue()));
			this.registro.setGenero(repositorio.getLabelParametro(this.registro.getIndGenero().longValue()));
			this.registro.setFechaNacimiento(formatearFecha(this.registro.getFecNacimiento()));
			
			/**Obtener detalle de Hojas de vida*/
			cargaDataHojaVida();
			
			inicializarPersonaHistorialValidar();
			this.domicilioPersona.setIdPersona(this.fichaArbitral.getIdPersona());
			this.domicilioPersona=registrarDatosPersonalesService.obtenerDomicilio(domicilioDTO);
			this.domicilioValidar=this.domicilioPersona.clone();
			
			this.domicilioPersona.setDireccion(this.domicilioPersona.getDireccion().toUpperCase());
			this.domicilioPersona.setReferencias(this.domicilioPersona.getReferencias().toUpperCase());
			this.domicilioPersona.setUrbanizacion(this.domicilioPersona.getUrbanizacion().toUpperCase());
			
			this.domicilioPersona.setTipoZona(repositorio.getLabelTipoZona(this.domicilioPersona.getIdTipoZona()).toUpperCase());
			this.domicilioPersona.setTipoVia(repositorio.getLabelTipoVia(this.domicilioPersona.getIdTipoVia()).toUpperCase());
			//this.domicilioPersona.setRegion(repositorio.getLabelRegion(this.domicilioPersona.getIdRegion()));		
//			this.domicilioPersona.setProvincia(repositorio.getLabelProvincia(this.domicilioPersona.getIdProvincia()));
//			this.domicilioPersona.setDistrito(repositorio.getLabelDistrito(this.domicilioPersona.getIdDistrito()));
			
			consultarComunicaciones();
			hablitarComunicacion();
			System.out.println(personaDTO.getIdPersona());

		} catch (ModeloException e) {
			setMensajeroError(propSirenas.getString(ConstanteWeb.EXC_MODELO_TITLE),e.getMessage());
		}catch (Exception e) {
			setMensajeroError(propSirenas.getString(ConstanteWeb.EXC_VISTA_TITLE),"No se Completo la Carga de Datos del Formulario");
		}
		
		return "verRegistroDatosPersonales";
	}
	
	public void cargaDataHojaVida()throws Exception  {

		this.listaHojaVidaDTO=registrarDatosPersonalesService.obtenerListaHojaVida(this.registro);
		
		if(!this.listaHojaVidaDTO.isEmpty()){
			for (HojaVidaDTO hojaVidaDTO : listaHojaVidaDTO) {
				if(hojaVidaDTO.getHojaActiva()){
					this.hojaVidaActiva=hojaVidaDTO;
					break;
				}
			}
		}
	}

	//private StreamedContent fotoUsuario;
	public StreamedContent fotoUsuario;

	public void verPhoto(String nombreArchivo)throws Exception  {
		String archivoRuta=propSirenas.getString(ConstanteWeb.FS_PERSONALES)+""+nombreArchivo;        
		
        File archivoPhoto = new File(propSirenas.getString(ConstanteWeb.FS_PERSONALES)+""+nombreArchivo);
         try {
             byte[] archivo = new byte[(int) archivoPhoto.length()];
             
        	// getSession(true).removeAttribute(ConstanteWeb.REPORTE_PDF);       
        	 FileInputStream fileInputStream = new FileInputStream(archivoPhoto);
        	 fileInputStream.read(archivo);
        	 for (int i = 0; i < archivo.length; i++) {
                           System.out.print((char)archivo[i]);
        	 }
        	// getSession(true).setAttribute(ConstanteWeb.REPORTE_PDF, archivo);
        	 
        	 fotoUsuario = new DefaultStreamedContent(new ByteArrayInputStream( archivo), "image/jpeg");

 			RequestContext.getCurrentInstance().update("dialogPhoto");
 			RequestContext.getCurrentInstance().update("fotoUsuario");
 			
     		context = RequestContext.getCurrentInstance();
     		context.execute("PF('dialogPhoto').show();");
        	 
         } catch (FileNotFoundException e) {
        	 e.printStackTrace();
        	 throw new NegocioException("No se encontro el Archivo PDF");
         }catch (Exception e) { 
			  e.printStackTrace();
				throw new NegocioException("Problemas al Generar version en PDF");
         }	
	}
	
	public void verHojaVidaPDF(String nombreArchivo)throws Exception  {

		String archivoRuta=propSirenas.getString(ConstanteWeb.FS_PERSONALES)+""+nombreArchivo;
		
        File archivoPDF = new File(propSirenas.getString(ConstanteWeb.FS_PERSONALES)+""+nombreArchivo);
         try {
             byte[] archivo = new byte[(int) archivoPDF.length()];
             
        	 getSession(true).removeAttribute(ConstanteWeb.REPORTE_PDF);       
        	 FileInputStream fileInputStream = new FileInputStream(archivoPDF);
        	 fileInputStream.read(archivo);
        	 for (int i = 0; i < archivo.length; i++) {
                           System.out.print((char)archivo[i]);
        	 }
        	 getSession(true).setAttribute(ConstanteWeb.REPORTE_PDF, archivo);
        	 abrirVisorPDFPopup();
         } catch (FileNotFoundException e) {
        	 e.printStackTrace();
        	 throw new NegocioException("No se encontro el Archivo PDF");
         }catch (Exception e) { 
			  e.printStackTrace();
				throw new NegocioException("Problemas al Generar version en PDF");
         }	
	}

	public void abrirVisorPDFPopup(){
		context = RequestContext.getCurrentInstance();
		context.execute("PF('dialogVistaHojaVida').show();");
	}
	public void cerrarVisorPDFPopup(){
		context = RequestContext.getCurrentInstance();
		context.execute("PF('dialogVistaHojaVida').hide();");
	}
	
	
	
	public String formatearFecha(Date fecha)
	{
			SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
		    String fechaformateada = sdf.format(fecha);
		    
		    return fechaformateada;
				
	
	}
	
	public void obtenerRectificacionesPersona()
	{
		try {
			this.listPersonaRectificadas=registrarDatosPersonalesService.consultarRectificacionesPersona(this.registro.getIdPersona());
			for (PersonaDTO personaDTO : listPersonaRectificadas) {
				personaDTO.setApMaterno(personaDTO.getApMaterno().toUpperCase());
				personaDTO.setApPaterno(personaDTO.getApPaterno().toUpperCase());
				personaDTO.setNombres(personaDTO.getNombres().toUpperCase());
				personaDTO.setGenero(repositorio.getLabelParametro(this.registro.getIndGenero().longValue()).toUpperCase());
				personaDTO.setTipoDocumento(repositorio.getLabelParametro(this.registro.getIndTipoDocumento().longValue()).toUpperCase());
				
			}
		} catch (Exception e) {
			this.listPersonaRectificadas= new ArrayList<PersonaDTO>();
		}
		
		context = RequestContext.getCurrentInstance();
		context.execute("PF('dialogHistoricoPersona').show();");
	}
	
	
	public void obtenerRectificacionesComunicacion()
	{
		try {
			this.listaComunicacionesHistorial=registrarDatosPersonalesService.consultarRectificacionesComunicacion(this.registro.getIdPersona());
			for (ComunicacionesDTO comunicacionesDTO : listaComunicacionesHistorial) {
				comunicacionesDTO.setTipoComunicacion(repositorio.getLabelParametro(comunicacionesDTO.getIndTipoComunicacion().longValue()).toUpperCase());
				comunicacionesDTO.setPublico(convertSioNo(comunicacionesDTO.getPublico()).toUpperCase());
				
			}
			
		} catch (Exception e) {
			this.listPersonaRectificadas= new ArrayList<PersonaDTO>();
		}
		context = RequestContext.getCurrentInstance();
		context.execute("PF('dialogHistoricoComunicacion').show();");
	}
	
	
	public void abrirConfirmacionPopup(){
		context = RequestContext.getCurrentInstance();
		context.execute("PF('dialogoConfirmacion').show();");
	}
	
	
	public void abrirCodTramitePopup(){
		context = RequestContext.getCurrentInstance();
		context.execute("PF('dialogoTramite').show();");
	}
	public void cerrarConfirmacionPopup(){
		context = RequestContext.getCurrentInstance();
		context.execute("PF('dialogoConfirmacion').hide();");
	}
	public void cerrarCodTramitePopup(){
		context = RequestContext.getCurrentInstance();
		context.execute("PF('dialogoTramite').hide();");
	}
	
	public void validarModificacion() throws Exception{
		if(validarCambioComunicaciones()==true || validarCambiosPersona()==true)
		{
			abrirCodTramitePopup();	
			cerrarConfirmacionPopup();
		}
		cerrarConfirmacionPopup();
	}
	
	public void actualizarDatosPersonales() throws Exception{
			actualizarTramiteModificacionComunicacion();			
			actualizarPersona();
			actualizarComunicacionAdmin();			
			cerrarCodTramitePopup();
	}
	
	private void hablitarComunicacion()
	{
		Long idEstadoFicha=this.fichaArbitral.getIdEstadoFicha();
		if(comunicaciones!=null)
		{	if(this.comunicaciones.getDescripcionDetalle()!=null){
				if(this.comunicaciones.getDescripcionDetalle().trim().length()>Long.parseLong(propSirenas.getString(ConstanteWeb.VALORCERO)))
				{			
					this.enabledComunicacion=true;
				}
			}
		}	
		if(this.comunicaciones2!=null)
		{
			if(this.comunicaciones2.getDescripcionDetalle()!=null){
				if(this.comunicaciones2.getDescripcionDetalle().trim().length()>Long.parseLong(propSirenas.getString(ConstanteWeb.VALORCERO)))
				{			
					this.enabledComunicacion2=true;
				}
			}
		}
		if(idEstadoFicha!=Long.parseLong(propSirenas.getString(ConstanteWeb.ID_ESTADO_PENDIENTE)))
		 {
			if(this.comunicaciones3!=null)
			{
				if(this.comunicaciones3.getDescripcionDetalle()!=null)
				{
					if(this.comunicaciones3.getDescripcionDetalle().trim().length()>Long.parseLong(propSirenas.getString(ConstanteWeb.VALORCERO)))
					{			
						this.enabledComunicacion3=true;
					}
				}
			}
			if(this.comunicaciones4!=null)
			{
				if(this.comunicaciones4.getDescripcionDetalle()!=null){
					if(this.comunicaciones4.getDescripcionDetalle().trim().length()>Long.parseLong(propSirenas.getString(ConstanteWeb.VALORCERO)))
					{			
						this.enabledComunicacion4=true;
					}
				}
			}
		 }else
		{
			this.enabledComunicacion3=false;
			this.enabledComunicacion4=false;
			this.btnGuardar=true;
		}
	}
	
	
	public void  actualizarComunicacionAdmin ()throws Exception{
         System.out.println("Entro a registrarPersona");
		PersonaDTO personaDTO;
		ComunicacionesDTO comunicacionesDTO;
		ComunicacionesDTO comunicaciones2DTO;
		ComunicacionesDTO comunicaciones3DTO;
		ComunicacionesDTO comunicaciones4DTO;

		
		try{
			/* Conversion de datos de interfaz */
			personaDTO= this.registro.clone();
			
				/** Comunicacion 1 -- correo-- **/
			comunicacionesDTO= this.comunicaciones.clone();
			comunicacionesDTO.setEstado(Long.parseLong(propSirenas.getString(ConstanteWeb.ID_ESTADO)));	
			comunicacionesDTO.setIndTipoComunicacion(Long.parseLong(propSirenas.getString(ConstanteWeb.ID_CORREOELECTRONICO)));
			comunicacionesDTO.setIdPersona(this.fichaArbitral.getIdPersona());
			comunicacionesDTO.setPublico(convertAString(comunicacionesDTO.isIndPublico()));
			
			/** Comunicacion 2  -- telefono**/
			comunicaciones2DTO= this.comunicaciones2.clone();
			comunicaciones2DTO.setEstado(Long.parseLong(propSirenas.getString(ConstanteWeb.ID_ESTADO)));	
			comunicaciones2DTO.setIndTipoComunicacion(Long.parseLong(propSirenas.getString(ConstanteWeb.ID_TELEFONO)));
			comunicaciones2DTO.setIdPersona(this.fichaArbitral.getIdPersona());
			comunicaciones2DTO.setPublico(convertAString(comunicaciones2DTO.isIndPublico()));
			
			/** Comunicacion 3 -- correo-- **/
			comunicaciones3DTO= this.comunicaciones3.clone();
			comunicaciones3DTO.setEstado(Long.parseLong(propSirenas.getString(ConstanteWeb.ID_ESTADO)));		
			comunicaciones3DTO.setIndTipoComunicacion(Long.parseLong(propSirenas.getString(ConstanteWeb.ID_CORREOELECTRONICODOS)));
			comunicaciones3DTO.setIdPersona(this.fichaArbitral.getIdPersona());
			comunicaciones3DTO.setPublico(convertAString(comunicaciones3DTO.isIndPublico()));
			
			/** Comunicacion 3 -- telefono2-- **/
			comunicaciones4DTO= this.comunicaciones4.clone();
			comunicaciones4DTO.setEstado(Long.parseLong(propSirenas.getString(ConstanteWeb.ID_ESTADO)));		
			comunicaciones4DTO.setIndTipoComunicacion(Long.parseLong(propSirenas.getString(ConstanteWeb.ID_TELEFONODOS)));
			comunicaciones4DTO.setIdPersona(this.fichaArbitral.getIdPersona());
			comunicaciones4DTO.setPublico(convertAString(comunicaciones4DTO.isIndPublico()));
			//solicitudInscripcionDTO.setIdSolicitud(Long.parseLong("0"));
			
			/* Ejecutar guardar borrador de formulario. */
			
			
//			this.registro = registrarDatosPersonalesService.guardarPersona(personaDTO,auditoria);
//			inicializarPersonaHistorialValidar();
			this.comunicaciones= registrarDatosPersonalesService.guardarComunicaciones(comunicacionesDTO,auditoria);
			this.comunicaciones2= registrarDatosPersonalesService.guardarComunicaciones(comunicaciones2DTO,auditoria);
			this.comunicaciones3= registrarDatosPersonalesService.guardarComunicaciones(comunicaciones3DTO,auditoria);
			this.comunicaciones4= registrarDatosPersonalesService.guardarComunicaciones(comunicaciones4DTO,auditoria);
		    
			
			
					
			
			setMensajeroInfo(propSirenas.getString(ConstanteWeb.MSJ_REG_OK));
			
			RequestContext.getCurrentInstance().update("idDatosPersonalesAdmin");
			RequestContext.getCurrentInstance().update("idDatosPersonalesTramiteAdmin");
			codTramite="";
		}catch(Exception e){
			log.error(e.getMessage(),e);
			setMensajeroError("Error en Registro","");
	         System.out.println("Error");
		}
	}
	
	public String convertAString(boolean indicador){
		if(indicador==true){
			return "1";
		}else{
			return "0";
		}
		
	}
	public String convertSioNo(String indicador){
		if(indicador.equals("1")){
			return "SI";
		}else{
			return "No";
		}
		
	}
	public boolean convertABoolean(String indicador){
		if(indicador.toUpperCase().equals("1")){
			return true;
		}else{
			return false;
		}
		
	}
	private void consultarComunicaciones(){
		
		try {
			this.comunicaciones=registrarDatosPersonalesService.consultarComunicacion(this.fichaArbitral.getIdPersona(),Long.parseLong(propSirenas.getString(ConstanteWeb.ID_CORREOELECTRONICO)));			
			this.comunicaciones2=registrarDatosPersonalesService.consultarComunicacion(this.fichaArbitral.getIdPersona(),Long.parseLong(propSirenas.getString(ConstanteWeb.ID_TELEFONO)));			
			this.comunicaciones3=registrarDatosPersonalesService.consultarComunicacion(this.fichaArbitral.getIdPersona(),Long.parseLong(propSirenas.getString(ConstanteWeb.ID_CORREOELECTRONICODOS)));			
			this.comunicaciones4=registrarDatosPersonalesService.consultarComunicacion(this.fichaArbitral.getIdPersona(),Long.parseLong(propSirenas.getString(ConstanteWeb.ID_TELEFONODOS)));
			validarComunicaciones();
		
			
		} catch (Exception e) {
			this.comunicaciones= new ComunicacionesDTO();
			this.comunicaciones2= new ComunicacionesDTO();
			this.comunicaciones3= new ComunicacionesDTO();
			this.comunicaciones4= new ComunicacionesDTO();
		}
	}
	
	private void validarComunicaciones()
	{
		if(comunicaciones==null)		
			this.comunicaciones= new ComunicacionesDTO();	
		else
			this.comunicaciones.setIndPublico(convertABoolean(this.comunicaciones.getPublico()));		
		if(comunicaciones2==null)
			this.comunicaciones2= new ComunicacionesDTO();	
		else
			this.comunicaciones2.setIndPublico(convertABoolean(this.comunicaciones2.getPublico()));
		
		if(comunicaciones3==null)
			this.comunicaciones3= new ComunicacionesDTO();	
		else
			this.comunicaciones3.setIndPublico(convertABoolean(this.comunicaciones3.getPublico()));
		
		if(comunicaciones4==null)
			this.comunicaciones4= new ComunicacionesDTO();	
		else
			this.comunicaciones4.setIndPublico(convertABoolean(this.comunicaciones4.getPublico()));
	
	}
	
	public boolean validarCambioComunicaciones() throws Exception
	{
		ComunicacionesDTO comunicacion01;
		ComunicacionesDTO comunicacion02;
		ComunicacionesDTO comunicacion03;
		ComunicacionesDTO comunicacion04;
		
		comunicacion01= new ComunicacionesDTO();
		comunicacion02= new ComunicacionesDTO();
		comunicacion03= new ComunicacionesDTO();
		comunicacion04= new ComunicacionesDTO();
		Integer conteo=0;
		boolean confirmacion=false;
		if(this.comunicaciones!=null)
		{
			this.comunicaciones.setPublico(convertAString(this.comunicaciones.isIndPublico()));
			comunicacion01=registrarDatosPersonalesService.obtenerComunicacionId(this.comunicaciones.getIdComunicaciones());
			String publico1;
			String publico01;
			publico1=comunicacion01.getPublico().trim();
			publico01=this.comunicaciones.getPublico().trim();
			if(!comunicacion01.getDescripcionDetalle().trim().equals(this.comunicaciones.getDescripcionDetalle().trim()) || !publico1.equals(publico01))
			{
				this.comunicaciones.setIdModificado(this.comunicaciones.getIdComunicaciones());
				conteo+=1;				
			}
		}
		
		if(this.comunicaciones2!=null)
		{
			if(this.comunicaciones2.getDescripcionDetalle().trim().length()>0) {
				this.comunicaciones2.setPublico(convertAString(this.comunicaciones2.isIndPublico()));
				comunicacion02=registrarDatosPersonalesService.obtenerComunicacionId(this.comunicaciones2.getIdComunicaciones());
				if(comunicacion02!=null){
					if(comunicacion02.getDescripcionDetalle()!=null)
					{	
						if(comunicacion02.getDescripcionDetalle().trim().length()>0)
						{
							String publico2=comunicacion02.getPublico().trim();
							String publico02=this.comunicaciones2.getPublico().trim();
							if(comunicacion02.getDescripcionDetalle()==null)
							comunicacion02.setDescripcionDetalle("");
							if(!comunicacion02.getDescripcionDetalle().trim().equals(this.comunicaciones2.getDescripcionDetalle().trim()) || !publico2.equals(publico02))
							{
								this.comunicaciones2.setIdModificado(this.comunicaciones2.getIdComunicaciones());
								conteo+=1;				
							}
						}
						else
						{
							conteo+=1;
						}
					}
					else
					{
						conteo+=1;
					}
				}
				else
				{
					conteo+=1;
				}
			}
		}
		if(this.comunicaciones3!=null)
		{
			if(this.comunicaciones3.getDescripcionDetalle().trim().length()>0){
				this.comunicaciones3.setPublico(convertAString(this.comunicaciones3.isIndPublico()));
				comunicacion03=registrarDatosPersonalesService.obtenerComunicacionId(this.comunicaciones3.getIdComunicaciones());
				if(comunicacion03!=null)
				{	
					if(comunicacion03.getDescripcionDetalle()!=null)
					{
						if(comunicacion03.getDescripcionDetalle().trim().length()>0)
						{
							String publico3=comunicacion03.getPublico().trim();
							String publico03=this.comunicaciones3.getPublico().trim();
							if(comunicacion03.getDescripcionDetalle()==null)
								comunicacion03.setDescripcionDetalle("");
							if(!comunicacion03.getDescripcionDetalle().trim().equals(this.comunicaciones3.getDescripcionDetalle().trim()) || !publico3.equals(publico03))
							{
								this.comunicaciones.setIdModificado(this.comunicaciones.getIdComunicaciones());
								conteo+=1;				
							}
							
						}
						else
						{
							conteo+=1;	
						}
					}
					else
					{
						conteo+=1;	
					}
				}
				else
				{
					conteo+=1;	
				}
			}
		}
		if(this.comunicaciones4!=null)
		{
			if(this.comunicaciones4.getDescripcionDetalle().trim().length()>0){
				this.comunicaciones4.setPublico(convertAString(this.comunicaciones4.isIndPublico()));
				comunicacion04=registrarDatosPersonalesService.obtenerComunicacionId(this.comunicaciones4.getIdComunicaciones());
				if(comunicacion04!=null)
				{	
					if(comunicacion04.getDescripcionDetalle()!=null)
					{
						if(comunicacion04.getDescripcionDetalle().trim().length()>0)
						{
							String publico4=comunicacion04.getPublico().trim();
							String publico04=this.comunicaciones4.getPublico().trim();
							if(comunicacion04.getDescripcionDetalle()==null)
								comunicacion04.setDescripcionDetalle("");
							if(!comunicacion04.getDescripcionDetalle().trim().equals(this.comunicaciones4.getDescripcionDetalle().trim()) || !publico4.equals(publico04))
							{
								this.comunicaciones4.setIdModificado(this.comunicaciones4.getIdComunicaciones());
								conteo+=1;				
							}
						}
						else
						{
							conteo+=1;
						}
					}
					else
					{
						conteo+=1;
					}
				}
				else
				{
					conteo+=1;
				}
			}
		}
		
		if(conteo>0)
		{
			confirmacion=true;
		}
		return confirmacion;
	}
	
	public void actualizarTramiteModificacionComunicacion()
	{
		if(this.comunicaciones!=null)
		{
			if(this.comunicaciones.getIdModificado()!=0)
			{
				this.comunicaciones.setCodTramite(codTramite);
			}
			
		}
		if(this.comunicaciones2!=null)
		{
			if(this.comunicaciones2.getIdModificado()!=0)
			{
				this.comunicaciones2.setCodTramite(codTramite);
			}
		}
		if(this.comunicaciones3!=null)
		{
			if(this.comunicaciones3.getIdModificado()!=0)
			{
				this.comunicaciones3.setCodTramite(codTramite);
			}
		}
		if(this.comunicaciones4!=null)
		{
			if(this.comunicaciones4.getIdModificado()!=0)
			{
				this.comunicaciones4.setCodTramite(codTramite);
			}
		}
		
	}
	
	
	public void inicializarPersonaHistorialValidar(){
		this.personaHistorial= new PersonaDTO();
		this.personaHistorial.setNumRuc(this.registro.getNumRuc());
		this.personaHistorial.setIndTipoDocumento(this.registro.getIndTipoDocumento());
		this.personaHistorial.setNumDocumento(this.registro.getNumDocumento());
		this.personaHistorial.setApMaterno(this.registro.getApMaterno());
		this.personaHistorial.setApPaterno(this.registro.getApPaterno());
		this.personaHistorial.setNombres(this.registro.getNombres());
		this.personaHistorial.setNombres(this.registro.getNombres());
		this.personaHistorial.setFecNacimiento(this.registro.getFecNacimiento());
	}
	public boolean validarCambiosPersona(){
		boolean modificado=false;

		Long ruc;
		String numDoc,apePaterno,apeMaterno,nombres="";
		Date fecNacimiento=null;
		Integer indTipoDocuemento=0;
		ruc=this.registro.getNumRuc();
		numDoc=this.registro.getNumDocumento().trim();
		apePaterno=this.registro.getApPaterno().trim();
		apeMaterno=this.registro.getApMaterno().trim();
		nombres=this.registro.getNombres().trim();
		fecNacimiento=this.registro.getFecNacimiento();
		indTipoDocuemento=this.registro.getIndTipoDocumento();

		Long rucHistorial;
		String numDocHistorial,apePaternoHistorial,apeMaternoHistorial,nombresHistorial="";
		Date fecNacimientoHistorial=null;
		Integer indTipoDocuementoHistorial=0;
		rucHistorial=this.personaHistorial.getNumRuc();
		numDocHistorial=this.personaHistorial.getNumDocumento().trim();
		apePaternoHistorial=this.personaHistorial.getApPaterno().trim();
		apeMaternoHistorial=this.personaHistorial.getApMaterno().trim();
		nombresHistorial=this.personaHistorial.getNombres().trim();
		fecNacimientoHistorial=this.personaHistorial.getFecNacimiento();
		indTipoDocuementoHistorial=this.personaHistorial.getIndTipoDocumento();
		
		if(!ruc.equals(rucHistorial))
			modificado=true;
		if(!numDoc.trim().toString().equals(numDocHistorial.trim().toString()))
			modificado=true;
		if(!apePaterno.trim().toString().equals(apePaternoHistorial.trim().toString()))
			modificado=true;
		if(!apeMaterno.trim().toString().equals(apeMaternoHistorial.trim().toString()))
			modificado=true;		
		if(!nombres.trim().toString().equals(nombresHistorial.trim().toString()))
			modificado=true;
		if(fecNacimiento.compareTo(fecNacimientoHistorial)!=0)
			modificado=true;
			
		Calendar calendar = Calendar.getInstance();
		calendar.setTime(fecNacimiento);
		Integer dias,mes,anio;
		dias=calendar.get(Calendar.DAY_OF_MONTH);
		mes=calendar.get(Calendar.MONTH);
		anio=calendar.get(Calendar.YEAR);
		
		
		if(indTipoDocuemento!=indTipoDocuementoHistorial)
			modificado=true;
	
		if(modificado==true)
		{
			this.registro.setIdModificado(this.registro.getIdPersona());			
		}
		 return modificado;
	}
	
	/*** Metodo Para guardar las comunicaciones cuando aun estan pendientes de Registro ****/
	public void actualizarComunicaciones(){
		ComunicacionesDTO comunicacionesDTO;
		ComunicacionesDTO comunicaciones2DTO;
		ComunicacionesDTO comunicaciones3DTO;
		ComunicacionesDTO comunicaciones4DTO;
		
		
		try {
			/** Comunicacion 1 -- correo-- **/
			comunicacionesDTO= this.comunicaciones.clone();
			if(comunicacionesDTO.getDescripcionDetalle()!=null && comunicacionesDTO.getDescripcionDetalle().trim().length()>0){
				comunicacionesDTO.setEstado(Long.parseLong(propSirenas.getString(ConstanteWeb.ID_ESTADO)));	
				comunicacionesDTO.setIndTipoComunicacion(Long.parseLong(propSirenas.getString(ConstanteWeb.ID_CORREOELECTRONICO)));
				comunicacionesDTO.setIdPersona(this.fichaArbitral.getIdPersona());
				comunicacionesDTO.setPublico(convertAString(comunicacionesDTO.isIndPublico()));
				comunicacionesDTO=registrarDatosPersonalesService.guardarComunicaciones(comunicacionesDTO, auditoria);
			}
				
			/** Comunicacion 2  -- telefono**/
			comunicaciones2DTO= this.comunicaciones2.clone();
			if(comunicaciones2DTO.getDescripcionDetalle()!=null && comunicaciones2DTO.getDescripcionDetalle().trim().length()>0){
				comunicaciones2DTO.setEstado(Long.parseLong(propSirenas.getString(ConstanteWeb.ID_ESTADO)));	
				comunicaciones2DTO.setIndTipoComunicacion(Long.parseLong(propSirenas.getString(ConstanteWeb.ID_TELEFONO)));
				comunicaciones2DTO.setIdPersona(this.fichaArbitral.getIdPersona());
				comunicaciones2DTO.setPublico(convertAString(comunicaciones2DTO.isIndPublico()));
				comunicaciones2DTO=registrarDatosPersonalesService.guardarComunicaciones(comunicaciones2DTO, auditoria);
			}
			/** Comunicacion 3 -- correo-- **/
			comunicaciones3DTO= this.comunicaciones3.clone();
			if(comunicaciones3DTO.getDescripcionDetalle()!=null && comunicaciones3DTO.getDescripcionDetalle().trim().length()>0){
				comunicaciones3DTO.setEstado(Long.parseLong(propSirenas.getString(ConstanteWeb.ID_ESTADO)));		
				comunicaciones3DTO.setIndTipoComunicacion(Long.parseLong(propSirenas.getString(ConstanteWeb.ID_CORREOELECTRONICODOS)));
				comunicaciones3DTO.setIdPersona(this.fichaArbitral.getIdPersona());
				comunicaciones3DTO.setPublico(convertAString(comunicaciones3DTO.isIndPublico()));
				comunicaciones3DTO=registrarDatosPersonalesService.guardarComunicaciones(comunicaciones3DTO, auditoria);
			}
			/** Comunicacion 3 -- telefono2-- **/
			comunicaciones4DTO= this.comunicaciones4.clone();
			if(comunicaciones4DTO.getDescripcionDetalle()!=null && comunicaciones4DTO.getDescripcionDetalle().trim().length()>0){
				comunicaciones4DTO.setEstado(Long.parseLong(propSirenas.getString(ConstanteWeb.ID_ESTADO)));		
				comunicaciones4DTO.setIndTipoComunicacion(Long.parseLong(propSirenas.getString(ConstanteWeb.ID_TELEFONODOS)));
				comunicaciones4DTO.setIdPersona(this.fichaArbitral.getIdPersona());
				comunicaciones4DTO.setPublico(convertAString(comunicaciones4DTO.isIndPublico()));
				comunicaciones4DTO=registrarDatosPersonalesService.guardarComunicaciones(comunicaciones4DTO, auditoria);
			}
		} catch (Exception e) {
			e.printStackTrace();
			setMensajeroError("Error al registrar comunicaciones", null);
		}
		
	}
	
	public void registrarDomicilio(){
		
		System.out.println("Entro a registrarDomicilio");
		DomicilioDTO domicilioDTO;
		try {
			 /*Convercion de datos de interfaz*/ 
			domicilioDTO= this.domicilioPersona.clone();
			domicilioDTO.setIdPersona(Long.parseLong("1"));
			domicilioDTO.setEstado(Long.parseLong("1"));
			 /*Ejecutar guardar borrador de formulario.*/ 
			
			this.domicilioPersona=registrarDatosPersonalesService.guardarDomicilio(domicilioDTO, auditoria);
			setMensajeroInfo(ConstanteWeb.MSJ_REG_OK);
			log.info(ConstanteWeb.MSJ_REG_OK);
	         System.out.println("Ok");
			
		} catch (Exception e) {
			log.error(e.getMessage(),e);
			setMensajeroError("Error en Registro","");
	         System.out.println("Error");
		}
	}
	
	
	/**** metodo para actualizar los  las comunicaciones */
	public void actualizarPersona(){
		
		System.out.println("Entro a registrarDomicilio");
//		validarCambiosPersona();
		
		PersonaDTO personaDTO;
		try {
			 /*Convercion de datos de interfaz*/ 
			personaDTO= this.registro.clone();
			personaDTO.setIdPersona(this.fichaArbitral.getIdPersona());
			if(personaDTO.getIdModificado()>0)
			{
				personaDTO.setCodTramite(this.codTramite);
			}
			/*Ejecutar guardar borrador de formulario.*/ 
			
			
			this.registro=registrarDatosPersonalesService.actualizarPersona(personaDTO, auditoria);			
			inicializarPersonaHistorialValidar();			
			RequestContext.getCurrentInstance().update("idFormDatosPersonalesLectura");
			RequestContext.getCurrentInstance().update("idDialogDatosPersonalesLectura");
			setMensajeroInfo(propSirenas.getString(ConstanteWeb.MSJ_REG_OK));
		} catch (Exception e) {
			log.error(e.getMessage(),e);
			setMensajeroError("Error en Registro","");
	         System.out.println("Error");
		}
	}
	
	
	private Boolean validarCambiosDomicilio()
	{
		Boolean confirmacion=false;
		
		String direccionOri="",referenciaOri="",centroPobladoOri="",urbanizacionOri="";
		Long idTipoZonaOri=0L,idTipoViaOri=0L,idRegionOri=0L,idProvinciaOri=0L,idDistritoOri=0L;
		
		String direccionCam="",referenciaCam="",centroPobladoCam="",urbanizacionCam="";
		Long idTipoZonaCam=0L,idTipoViaCam=0L,idRegionCam=0L,idProvinciaCam=0L,idDistritoCam=0L;
		
		direccionOri=this.domicilioValidar.getDireccion();
		referenciaOri=this.domicilioValidar.getReferencias();
		centroPobladoOri=this.domicilioValidar.getCentroPoblado();
		urbanizacionOri=this.domicilioValidar.getUrbanizacion();
		idTipoZonaOri=this.domicilioValidar.getIdTipoZona();
		idTipoViaOri=this.domicilioValidar.getIdTipoVia();
		
		direccionCam=this.domicilioPersona.getDireccion();
		referenciaCam=this.domicilioPersona.getReferencias();
		centroPobladoCam=this.domicilioPersona.getCentroPoblado();
		urbanizacionCam=this.domicilioPersona.getUrbanizacion();
		idTipoZonaCam=this.domicilioPersona.getIdTipoZona();
		idTipoViaCam=this.domicilioPersona.getIdTipoVia();
		
		Integer conteo=0;
		
		if(!direccionCam.equals(direccionOri))
			conteo+=1;
		if(!referenciaCam.equals(referenciaOri))
			conteo+=1;
		if(!centroPobladoCam.equals(centroPobladoOri))
			conteo+=1;
		if(!urbanizacionCam.equals(urbanizacionOri))
			conteo+=1;
		if(idTipoViaCam!=idTipoViaOri)
			conteo+=1;
		if(idTipoZonaCam!=idTipoZonaOri)
			conteo+=1;
		
		if(conteo>0)
		{
			this.domicilioPersona.setIdModificado(this.domicilioPersona.getIdDomicilio());
			confirmacion=true;
		}
		
		return confirmacion;
		
		
		
		
	}

	
	
	public void actualizarDomicilio(){
		
		
		System.out.println("Entro a registrarDomicilio");
		DomicilioDTO domicilioDTO;
		try {
			 /*Convercion de datos de interfaz*/ 
			domicilioDTO= this.domicilioPersona.clone();			
			domicilioDTO.setEstado(Long.parseLong(propSirenas.getString(ConstanteWeb.ID_ESTADO)));
			 /*Ejecutar guardar borrador de formulario.*/ 
			if(domicilioDTO.getIdModificado()!=Long.parseLong(propSirenas.getString(ConstanteWeb.VALORCERO)))
			{
				domicilioDTO.setCodTramite(this.codTramite);
			}
			
			this.domicilioPersona=registrarDatosPersonalesService.actualizarDomicilio(domicilioDTO, auditoria);
			this.codTramite="";
			cerrarCodTramiteDomicilioPopup();
			
			RequestContext.getCurrentInstance().update("idFormDomicilio");
			RequestContext.getCurrentInstance().update("idDatosPersonalesTramiteAdminDomicilio");
			setMensajeroInfo(propSirenas.getString(ConstanteWeb.MSJ_REG_OK));
			log.info(ConstanteWeb.MSJ_REG_OK);
	         System.out.println("Ok");
			
		} catch (Exception e) {
			log.error(e.getMessage(),e);
			setMensajeroError("Error en Registro","");
	         System.out.println("Error");
		}
	}

	

	public void validarModificacionDomicilio() throws Exception{
		if(validarCambiosDomicilio()==true)
		{
			abrirCodTramiteDomicilioPopup();	
			cerrarConfirmacionDomicionPopup();
		}
		cerrarConfirmacionDomicionPopup();
	}

	public void abrirConfirmacionDomicionPopup(){
		context = RequestContext.getCurrentInstance();
		context.execute("PF('dialogoConfirmacionDomicilio').show();");
	}
	public void cerrarConfirmacionDomicionPopup(){
		context = RequestContext.getCurrentInstance();
		context.execute("PF('dialogoConfirmacionDomicilio').hide();");
	}

	public void abrirCodTramiteDomicilioPopup(){
		context = RequestContext.getCurrentInstance();
		context.execute("PF('dialogoTramiteDomicilio').show();");
	}
	public void cerrarCodTramiteDomicilioPopup(){
		context = RequestContext.getCurrentInstance();
		context.execute("PF('dialogoTramiteDomicilio').hide();");
	}

	
	public void obtenerRectificacionesDomicilio()
	{
		try {
			this.listDomicilioHistorial=registrarDatosPersonalesService.consultarRectificacionesDomicilio(this.registro.getIdPersona());
			for (DomicilioDTO domicilioDTO : listDomicilioHistorial) {
				domicilioDTO.setDireccion(domicilioDTO.getDireccion().toUpperCase());
				domicilioDTO.setReferencias(domicilioDTO.getReferencias().toUpperCase());
				domicilioDTO.setUrbanizacion(domicilioDTO.getUrbanizacion().toUpperCase());
				domicilioDTO.setCentroPoblado(domicilioDTO.getCentroPoblado().toUpperCase());
				domicilioDTO.setTipoVia(repositorio.getLabelTipoVia(domicilioDTO.getIdTipoVia()).toUpperCase());
				domicilioDTO.setTipoZona(repositorio.getLabelTipoZona(domicilioDTO.getIdTipoZona()).toUpperCase());
								
			}
		} catch (Exception e) {
			this.listDomicilioHistorial= new ArrayList<DomicilioDTO>();
		}
		
		context = RequestContext.getCurrentInstance();
		context.execute("PF('dialogHistoricoDomicilio').show();");
	}
	
	public void obtenerListaProvincia(Long idRegion){
		List<ProvinciaDTO> lstProvincia = null;
		RepositorioDatos repositorioDatos = obtenerRepositorioDatos();	
		try {
			//inicializaListaDistrito(repositorioDatos);
			
			lstProvincia = obtenerDatosComunesService.listarProvincia(idRegion);			
			repositorioDatos.setListaProvincia(cargaDatos.transformarProvinciaAListaSelectItem(lstProvincia));			
//			repositorioDatos.setIdProvincia(cargaDatos.transformarProvinciaAMapa(lstProvincia));	
//			repositorioDatos.setRegionActiva(idRegion);

		} catch (NamingException e) {		
			e.printStackTrace();
		}catch (Exception e) {
			e.printStackTrace();
		}
	}
	
	/**
	* Metodo que realiza la carga de la lista de provincias
	* @param codReniec codigo de la reniec, tipo String
	* @param repositorioDatos almacena los atributos de la carga inicial, tipo RepositorioDatos
	*/
	public void obtenerListaDistrito(Long idProvincia,Long idRegion){
		List<DistritoDTO> lstDistrito = null;
		RepositorioDatos repositorioDatos = obtenerRepositorioDatos();		
		try {
			lstDistrito = obtenerDatosComunesService.listarDistrito(idProvincia,idRegion);			
			repositorioDatos.setListaDistrito(cargaDatos.transformarDistritoAListaSelectItem(lstDistrito));			
//			repositorioDatos.setIdDistrito(cargaDatos.transformarDistritoAMapa(lstDistrito));			
		} catch (NamingException e) {		
			e.printStackTrace();
		}catch (Exception e) {
			e.printStackTrace();
		}
	}
	
	 
    public void guardarPDF(FileUploadEvent event) {
    	if(event.getFile().getFileName()!=null && event.getFile().getFileName().trim().length()>0){
	    	this.auditoria=(AuditoriaDTO)obtenerObjetoSession(ConstanteWeb.AUDITORIA);
	        Random rnd = new Random();       
	        try {
	    		this.fichaArbitral=(FichaArbitralDTO)obtenerObjetoSession(ConstanteWeb.FICHA_REGISTRO);
	    		String fileName=fichaArbitral.getIdFicha()+""+(int)(rnd.nextDouble() * 100)+"_"+event.getFile().getFileName();
	            copyFile(fileName, event.getFile().getInputstream());
	            
	            this.hojaVidaNueva.setIdPersona(this.registro.getIdPersona());
	            this.hojaVidaNueva.setHojaActiva(true);
	            this.hojaVidaNueva.setNombreArchivo(fileName);
	            registrarDatosPersonalesService.registrarNuevaHojaVida(this.hojaVidaNueva, auditoria);

	            cargaDataHojaVida();
	
			} catch (ModeloException e) {
				setMensajeroError(propSirenas.getString(ConstanteWeb.EXC_MODELO_TITLE),e.getMessage());
			}catch (Exception e) {
				setMensajeroError(propSirenas.getString(ConstanteWeb.EXC_VISTA_TITLE),propSirenas.getString(ConstanteWeb.EXC_VISTA_SOLICITUD));
			}
    	}else{
    		setMensajeroError(propSirenas.getString(ConstanteWeb.EXC_VISTA_TITLE), propSirenas.getString(ConstanteWeb.EXC_VISTA_REQUIRED_ARCHIVO));
    	}
    }  

    public void guardarPhoto(FileUploadEvent event) {  
    	if(event.getFile().getFileName()!=null && event.getFile().getFileName().trim().length()>0){

        	this.auditoria=(AuditoriaDTO)obtenerObjetoSession(ConstanteWeb.AUDITORIA);
            Random rnd = new Random();     
            try {
        		this.fichaArbitral=(FichaArbitralDTO)obtenerObjetoSession(ConstanteWeb.FICHA_REGISTRO);
        		String fileName=fichaArbitral.getIdFicha()+""+(int)(rnd.nextDouble() * 100)+"_"+event.getFile().getFileName();
                copyFile(fileName, event.getFile().getInputstream());
                
                this.registro.setNomFoto( fileName);
                this.registro.setFecFoto(new Date());
                registrarDatosPersonalesService.guardarPersona(this.registro, this.auditoria);

    			/**Realizamos la carga de los Datos de la Persona*/
    			/**Inicio Carga de la Persona en Sesion*/
    			PersonaDTO personaDTO=new PersonaDTO();
    			personaDTO.setIdPersona(this.fichaArbitral.getIdPersona());
    			this.registro=registrarDatosPersonalesService.obtenerPersona(personaDTO);
    			/**Seteamos los valores de los Indicadores de la Persona*/
    			this.registro.setTipoDocumento(repositorio.getLabelParametro(this.registro.getIndTipoDocumento().longValue()));
    			this.registro.setGenero(repositorio.getLabelParametro(this.registro.getIndGenero().longValue()));
    			this.registro.setFechaNacimiento(formatearFecha(this.registro.getFecNacimiento()));

    	        File archivoPhoto = new File(propSirenas.getString(ConstanteWeb.FS_PERSONALES)+""+fileName);
                byte[] archivo = new byte[(int) archivoPhoto.length()];
    			// getSession(true).removeAttribute(ConstanteWeb.REPORTE_PDF);       
	           	 FileInputStream fileInputStream = new FileInputStream(archivoPhoto);
	           	 fileInputStream.read(archivo);
	           	 for (int i = 0; i < archivo.length; i++) {
	                              System.out.print((char)archivo[i]);
	           	 }
	           	// getSession(true).setAttribute(ConstanteWeb.REPORTE_PDF, archivo);
	           	 
	           	 fotoUsuario = new DefaultStreamedContent(new ByteArrayInputStream( archivo), "image/jpeg");
	  			RequestContext.getCurrentInstance().update("fotoUsuario");
    		} catch (ModeloException e) {
    			setMensajeroError(propSirenas.getString(ConstanteWeb.EXC_MODELO_TITLE),e.getMessage());
    		}catch (Exception e) {
    			setMensajeroError(propSirenas.getString(ConstanteWeb.EXC_VISTA_TITLE),propSirenas.getString(ConstanteWeb.EXC_VISTA_SOLICITUD));
    		}
    	}else{
    		setMensajeroError(propSirenas.getString(ConstanteWeb.EXC_VISTA_TITLE), propSirenas.getString(ConstanteWeb.EXC_VISTA_REQUIRED_ARCHIVO));
    	}
    }  
 
    public void copyFile(String fileName, InputStream in) {
    	String archivo=propSirenas.getString(ConstanteWeb.FS_PERSONALES) + fileName;
    	try {
			OutputStream out = new FileOutputStream(new File(archivo));
			int read = 0;
			byte[] bytes = new byte[1024];
			  
			while ((read = in.read(bytes)) != -1) {
				out.write(bytes, 0, read);
			}
			  
			in.close();
			out.flush();
			out.close();
			  
		System.out.println("New file created!");
    	} catch (IOException e) {
    		System.out.println(e.getMessage());
    	}
    }
	
    
	
	public PersonaDTO getRegistro() {
		return registro;
	}


	public void setRegistro(PersonaDTO registro) {
		this.registro = registro;
	}


	public DomicilioDTO getDomicilioPersona() {
		return domicilioPersona;
	}


	public void setDomicilioPersona(DomicilioDTO domicilioPersona) {
		this.domicilioPersona = domicilioPersona;
	}


//	
//	public void upload() {
//        if(file != null) {
//            FacesMessage message = new FacesMessage("Succesful", file.getFileName() + " is uploaded.");
//            FacesContext.getCurrentInstance().addMessage(null, message);
//        }
//    }


	/**
	 * Metodo que permite obtener photo.
	 * @return photo , tipo UploadedFile.
	 */
	public UploadedFile getPhoto() {
		return photo;
	}

	/**
	 * Permite actualizar photo.
	 * @param photo, tipo UploadedFile.
	 */
	public void setPhoto(UploadedFile photo) {
		this.photo = photo;
	}

	public List<RegionDTO> getListRegion() {
		return listRegion;
	}


	public void setListRegion(List<RegionDTO> listRegion) {
		this.listRegion = listRegion;
	}
	
	public List<ProvinciaDTO> getListProvincia() {
		return listProvincia;
	}
	public List<DistritoDTO> getListDistrito() {
		return listDistrito;
	}


	public ComunicacionesDTO getComunicaciones() {
		return comunicaciones;
	}


	public void setComunicaciones(ComunicacionesDTO comunicaciones) {
		this.comunicaciones = comunicaciones;
	}


	public ComunicacionesDTO getComunicaciones2() {
		return comunicaciones2;
	}


	public void setComunicaciones2(ComunicacionesDTO comunicaciones2) {
		this.comunicaciones2 = comunicaciones2;
	}

	public ComunicacionesDTO getComunicaciones3() {
		return comunicaciones3;
	}


	public void setComunicaciones3(ComunicacionesDTO comunicaciones3) {
		this.comunicaciones3 = comunicaciones3;
	}


	public ComunicacionesDTO getComunicaciones4() {
		return comunicaciones4;
	}


	public void setComunicaciones4(ComunicacionesDTO comunicaciones4) {
		this.comunicaciones4 = comunicaciones4;
	}


	public PersonaDTO getPersonaHistorial() {
		return personaHistorial;
	}


	public void setPersonaHistorial(PersonaDTO personaHistorial) {
		this.personaHistorial = personaHistorial;
	}


	/**
	 * Metodo que permite obtener hojaVidaActiva.
	 * @return hojaVidaActiva , tipo HojaVidaDTO.
	 */
	public HojaVidaDTO getHojaVidaActiva() {
		return hojaVidaActiva;
	}

	/**
	 * Permite actualizar hojaVidaActiva.
	 * @param hojaVidaActiva, tipo HojaVidaDTO.
	 */
	public void setHojaVidaActiva(HojaVidaDTO hojaVidaActiva) {
		this.hojaVidaActiva = hojaVidaActiva;
	}

	/**
	 * Metodo que permite obtener hojaVidaNueva.
	 * @return hojaVidaNueva , tipo HojaVidaDTO.
	 */
	public HojaVidaDTO getHojaVidaNueva() {
		return hojaVidaNueva;
	}

	/**
	 * Permite actualizar hojaVidaNueva.
	 * @param hojaVidaNueva, tipo HojaVidaDTO.
	 */
	public void setHojaVidaNueva(HojaVidaDTO hojaVidaNueva) {
		this.hojaVidaNueva = hojaVidaNueva;
	}

	public FichaArbitralDTO getFichaArbitral() {
		return fichaArbitral;
	}
	public void setFichaArbitral(FichaArbitralDTO fichaArbitral) {
		this.fichaArbitral = fichaArbitral;
	}

	public Boolean getEnabledComunicacion() {
		return enabledComunicacion;
	}

	public void setEnabledComunicacion(Boolean enabledComunicacion) {
		this.enabledComunicacion = enabledComunicacion;
	}
	public Boolean getEnabledComunicacion2() {
		return enabledComunicacion2;
	}

	public void setEnabledComunicacion2(Boolean enabledComunicacion2) {
		this.enabledComunicacion2 = enabledComunicacion2;
	}	public Boolean getEnabledComunicacion3() {
		return enabledComunicacion3;
	}

	public void setEnabledComunicacion3(Boolean enabledComunicacion3) {
		this.enabledComunicacion3 = enabledComunicacion3;
	}
	public Boolean getEnabledComunicacion4() {
		return enabledComunicacion4;
	}
	public void setEnabledComunicacion4(Boolean enabledComunicacion4) {
		this.enabledComunicacion4 = enabledComunicacion4;
	}

	public void inicializaListaDistrito(RepositorioDatos repositorioDatos){
		repositorioDatos.setListaDistrito(cargaDatos.transformarDistritoAListaSelectItem(new ArrayList<DistritoDTO>()));			
		repositorioDatos.setIdDistrito(cargaDatos.transformarDistritoAMapa(new ArrayList<DistritoDTO>()));			
	}

	public String getCodTramite() {
		return codTramite;
	}

	public void setCodTramite(String codTramite) {
		this.codTramite = codTramite;
	}

	/**
	 * Metodo que permite obtener pdfCV.
	 * @return pdfCV , tipo UploadedFile.
	 */
	public UploadedFile getPdfCV() {
		return pdfCV;
	}

	/**
	 * Permite actualizar pdfCV.
	 * @param pdfCV, tipo UploadedFile.
	 */
	public void setPdfCV(UploadedFile pdfCV) {
		this.pdfCV = pdfCV;
	}

	/**
	 * Metodo que permite obtener listaHojaVidaDTO.
	 * @return listaHojaVidaDTO , tipo List<HojaVidaDTO>.
	 */
	public List<HojaVidaDTO> getListaHojaVidaDTO() {
		return listaHojaVidaDTO;
	}

	/**
	 * Permite actualizar listaHojaVidaDTO.
	 * @param listaHojaVidaDTO, tipo List<HojaVidaDTO>.
	 */
	public void setListaHojaVidaDTO(List<HojaVidaDTO> listaHojaVidaDTO) {
		this.listaHojaVidaDTO = listaHojaVidaDTO;
	}

	public List<PersonaDTO> getListPersonaRectificadas() {
		return listPersonaRectificadas;
	}

	public void setListPersonaRectificadas(List<PersonaDTO> listPersonaRectificadas) {
		this.listPersonaRectificadas = listPersonaRectificadas;
	}

	public List<ComunicacionesDTO> getListaComunicacionesHistorial() {
		return listaComunicacionesHistorial;
	}

	public void setListaComunicacionesHistorial(
			List<ComunicacionesDTO> listaComunicacionesHistorial) {
		this.listaComunicacionesHistorial = listaComunicacionesHistorial;
	}

	public Boolean getBtnGuardar() {
		return btnGuardar;
	}

	public void setBtnGuardar(Boolean btnGuardar) {
		this.btnGuardar = btnGuardar;
	}

	public DomicilioDTO getDomicilioValidar() {
		return domicilioValidar;
	}

	public void setDomicilioValidar(DomicilioDTO domicilioValidar) {
		this.domicilioValidar = domicilioValidar;
	}

	public List<DomicilioDTO> getListDomicilioHistorial() {
		return listDomicilioHistorial;
	}

	public void setListDomicilioHistorial(List<DomicilioDTO> listDomicilioHistorial) {
		this.listDomicilioHistorial = listDomicilioHistorial;
	}

	public StreamedContent getFotoUsuario() {
		return fotoUsuario;
	}

	public void setFotoUsuario(StreamedContent fotoUsuario) {
		this.fotoUsuario = fotoUsuario;
	}
	
	
}
